summaryrefslogtreecommitdiff
path: root/app/[lng]/admin/edp/actions/data-actions.ts
diff options
context:
space:
mode:
Diffstat (limited to 'app/[lng]/admin/edp/actions/data-actions.ts')
-rw-r--r--app/[lng]/admin/edp/actions/data-actions.ts155
1 files changed, 155 insertions, 0 deletions
diff --git a/app/[lng]/admin/edp/actions/data-actions.ts b/app/[lng]/admin/edp/actions/data-actions.ts
new file mode 100644
index 00000000..66fdc919
--- /dev/null
+++ b/app/[lng]/admin/edp/actions/data-actions.ts
@@ -0,0 +1,155 @@
+'use server'
+
+import db from '@/db/db'
+import { projects } from '@/db/schema/projects'
+import { vendors } from '@/db/schema/vendors'
+import { items } from '@/db/schema/items'
+import { contracts, contractItems } from '@/db/schema/contract'
+import { eq } from 'drizzle-orm'
+
+// 프로젝트 목록 조회
+export async function getProjects() {
+ try {
+ const projectList = await db.select({
+ id: projects.id,
+ code: projects.code,
+ name: projects.name,
+ type: projects.type,
+ }).from(projects)
+
+ return { success: true, data: projectList }
+ } catch (error) {
+ console.error('프로젝트 조회 오류:', error)
+ return { success: false, error: '프로젝트를 조회할 수 없습니다.' }
+ }
+}
+
+// 벤더 목록 조회
+export async function getVendors() {
+ try {
+ const vendorList = await db.select({
+ id: vendors.id,
+ vendorName: vendors.vendorName,
+ vendorCode: vendors.vendorCode,
+ status: vendors.status,
+ }).from(vendors)
+
+ return { success: true, data: vendorList }
+ } catch (error) {
+ console.error('벤더 조회 오류:', error)
+ return { success: false, error: '벤더를 조회할 수 없습니다.' }
+ }
+}
+
+// 아이템 목록 조회 (모든 필드 포함)
+export async function getItems() {
+ try {
+ const itemList = await db.select({
+ id: items.id,
+ ProjectNo: items.ProjectNo,
+ itemCode: items.itemCode,
+ itemName: items.itemName,
+ packageCode: items.packageCode,
+ smCode: items.smCode,
+ description: items.description,
+ parentItemCode: items.parentItemCode,
+ itemLevel: items.itemLevel,
+ deleteFlag: items.deleteFlag,
+ unitOfMeasure: items.unitOfMeasure,
+ steelType: items.steelType,
+ gradeMaterial: items.gradeMaterial,
+ changeDate: items.changeDate,
+ baseUnitOfMeasure: items.baseUnitOfMeasure,
+ }).from(items)
+
+ return { success: true, data: itemList }
+ } catch (error) {
+ console.error('아이템 조회 오류:', error)
+ return { success: false, error: '아이템을 조회할 수 없습니다.' }
+ }
+}
+
+// 기존 계약 목록 조회 (프로젝트 코드, 벤더명 포함)
+export async function getContracts() {
+ try {
+ const contractList = await db.select({
+ id: contracts.id,
+ contractNo: contracts.contractNo,
+ contractName: contracts.contractName,
+ status: contracts.status,
+ projectId: contracts.projectId,
+ vendorId: contracts.vendorId,
+ projectCode: projects.code,
+ projectName: projects.name,
+ vendorName: vendors.vendorName,
+ vendorCode: vendors.vendorCode,
+ })
+ .from(contracts)
+ .leftJoin(projects, eq(contracts.projectId, projects.id))
+ .leftJoin(vendors, eq(contracts.vendorId, vendors.id))
+
+ return { success: true, data: contractList }
+ } catch (error) {
+ console.error('계약 조회 오류:', error)
+ return { success: false, error: '계약을 조회할 수 없습니다.' }
+ }
+}
+
+// 특정 계약의 상세 정보 조회
+export async function getContractById(contractId: number) {
+ try {
+ const [contract] = await db.select({
+ id: contracts.id,
+ contractNo: contracts.contractNo,
+ contractName: contracts.contractName,
+ status: contracts.status,
+ projectId: contracts.projectId,
+ vendorId: contracts.vendorId,
+ projectCode: projects.code,
+ projectName: projects.name,
+ vendorName: vendors.vendorName,
+ vendorCode: vendors.vendorCode,
+ })
+ .from(contracts)
+ .leftJoin(projects, eq(contracts.projectId, projects.id))
+ .leftJoin(vendors, eq(contracts.vendorId, vendors.id))
+ .where(eq(contracts.id, contractId))
+
+ if (!contract) {
+ return { success: false, error: '계약을 찾을 수 없습니다.' }
+ }
+
+ return { success: true, data: contract }
+ } catch (error) {
+ console.error('계약 상세 조회 오류:', error)
+ return { success: false, error: '계약 상세 정보를 조회할 수 없습니다.' }
+ }
+}
+
+// 특정 계약의 아이템들 조회
+export async function getContractItems(contractId: number) {
+ try {
+ const contractItemList = await db.select({
+ id: contractItems.id,
+ contractId: contractItems.contractId,
+ itemId: contractItems.itemId,
+ description: contractItems.description,
+ quantity: contractItems.quantity,
+ unitPrice: contractItems.unitPrice,
+ // 아이템 정보
+ ProjectNo: items.ProjectNo,
+ itemCode: items.itemCode,
+ itemName: items.itemName,
+ packageCode: items.packageCode,
+ unitOfMeasure: items.unitOfMeasure,
+ })
+ .from(contractItems)
+ .leftJoin(items, eq(contractItems.itemId, items.id))
+ .where(eq(contractItems.contractId, contractId))
+
+ return { success: true, data: contractItemList }
+ } catch (error) {
+ console.error('계약 아이템 조회 오류:', error)
+ return { success: false, error: '계약 아이템을 조회할 수 없습니다.' }
+ }
+}